<?php
class YuSmarty extends Smarty {
    /**
     * 标识此Smarty是否空闲，用于Smarty池
     * @author YcoeXu
     */
    public $is_free = true;
    
    public $test = 'ycoe';
    /**
     * 释放此Smarty对象
     */
    public function free(){
		$this->is_free = true;
		if(defined('DB_DEBUG') && DB_DEBUG){
			$this->clearAllCache();
		}
		$this->clearAllAssign();
		//还原左起始符
		$this->left_delimiter = '!{';
    }
    
    /**
     * 设置变量，如果name为一个数组， 则解开数组后再存值
     * @see protected/includes/views/sysplugins/Smarty_Internal_Data::assign()
     */
    public function assign($name, $value=null){
    	if(is_array($name)){
    		foreach ($name as $k=>$v){
    			parent::assign($k, $v);
    		}
    	}else{
    		parent::assign($name, $value);
    	}
    }

    /**
     * 在使用Smarty扩展调用assign方法时，它没办法调用到重写的assign方法，因此只好使用别名了，有点汗
     */
    public function assign2($name, $value=null){
    	self::assign($name, $value);
    }
    
    /**
     * 即时编译一段模板字符串
     * @param $template_str
     */
    public function compile($template_str, $type='eval'){
    	$content = null;
    	if($type=='eval'){
	    	$content = $this->fetch('eval:' . $template_str);// compiles every time
    	}else{
	    	$content = $this->fetch('string:' . $template_str);// compiles for later reuse
    	}
    	$this->free();
    	return $content;
    }
}

?>